package com.monitor;

import com.monitor.security.PasswordManager;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.shape.Polygon;
import javafx.stage.Stage;

import java.io.IOException;

/**
 * 首页面板，显示系统主要功能和状态概览
 * JavaFX实现版本
 */
public class DashBoardFrame extends Application {
    private static final String TITLE = "金惠反黄专家";
    private static final int WIDTH = 600;
    private static final int HEIGHT = 400;
    private static final Color PRIMARY_BLUE = Color.web("#1b81d5"); // Main blue from image
    private static final Color SHIELD_BLUE = Color.web("#4db3e6"); // Lighter blue for shield
    
    private Stage primaryStage;
    
    public DashBoardFrame() {
        // 构造函数保留，但主要初始化逻辑移至start方法
    }
    
    @Override
    public void start(Stage primaryStage) {
        this.primaryStage = primaryStage;
        try {
            initUI();
        } catch (Exception e) {
            e.printStackTrace();
            showErrorAlert("初始化界面失败", e.getMessage());
        }
    }
    
    /**
     * 打开MainFrame界面
     */
    private void openMainFrame() {
        try {
            // 创建并显示MainFrame
            MainFrame mainFrame = new MainFrame();
            mainFrame.setVisible(true);
            
            // 关闭当前窗口
            primaryStage.close();
        } catch (Exception e) {
            e.printStackTrace();
            showErrorAlert("打开主界面失败", e.getMessage());
        }
    }
    
    /**
     * 显示密码验证对话框
     */
    private void showPasswordDialog() {
        try {
            // 创建密码管理器
            PasswordManager passwordManager = new PasswordManager();
            
            // 创建对话框
            Dialog<ButtonType> dialog = new Dialog<>();
            dialog.setTitle("密码验证");
            dialog.initOwner(primaryStage);
            
            // 设置对话框按钮
            dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);
            
            // 创建对话框内容
            GridPane grid = new GridPane();
            grid.setHgap(10);
            grid.setVgap(10);
            grid.setPadding(new javafx.geometry.Insets(20, 150, 10, 10));
            
            PasswordField passwordField = new PasswordField();
            passwordField.setPromptText("请输入密码");
            
            Label noteLabel = new Label("注意：初始密码为112233，可在维护中心修改密码。");
            noteLabel.setWrapText(true);
            
            grid.add(new Label("请输入管理员密码："), 0, 0);
            grid.add(passwordField, 1, 0);
            grid.add(noteLabel, 0, 1, 2, 1);
            
            dialog.getDialogPane().setContent(grid);
            
            // 请求焦点在密码字段
            passwordField.requestFocus();
            
            // 显示对话框并等待用户响应
            dialog.showAndWait().ifPresent(response -> {
                if (response == ButtonType.OK) {
                    String password = passwordField.getText();
                    
                    if (password.isEmpty()) {
                        showErrorAlert("错误", "请输入密码");
                        return;
                    }
                    
                    if (passwordManager.verifyPassword(password)) {
                        // 密码正确，打开主界面
                        openMainFrame();
                    } else {
                        // 密码错误，显示错误信息
                        showErrorAlert("错误", "密码错误，请重试");
                    }
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
            showErrorAlert("显示密码对话框失败", e.getMessage());
        }
    }
    
    private void showErrorAlert(String title, String message) {
        Alert alert = new Alert(Alert.AlertType.ERROR);
        alert.setTitle(title);
        alert.setHeaderText(null);
        alert.setContentText(message);
        alert.showAndWait();
    }
    
    private void initUI() throws IOException {
        // 加载FXML文件
        FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DashBoard.fxml"));
        Parent root = loader.load();
        
        // 设置场景
        Scene scene = new Scene(root, WIDTH, HEIGHT);
        scene.getStylesheets().add(getClass().getResource("/css/style.css").toExternalForm());
        
        // 设置舞台
        primaryStage.setTitle(TITLE);
        primaryStage.setScene(scene);
        primaryStage.setResizable(false);
        primaryStage.show();
        
        // 获取控制器并设置事件处理器
        setupEventHandlers(loader);
    }
    
    private void setupEventHandlers(FXMLLoader loader) {
        // 获取控制器
        Object controller = loader.getController();
        
        // 如果控制器实现了特定接口或有特定方法，可以在这里设置回调
        // 例如，可以设置密码验证对话框的回调
        
        // 为了简单起见，我们直接在FXML中定义了大部分事件处理
        // 这里可以添加额外的事件处理逻辑
    }
    
    /**
     * 主方法，用于直接启动应用程序
     */
    public static void main(String[] args) {
        launch(args);
    }
}